#include "sistema.h"

int createSem(int key) {
  int sem;
  if ((sem=semget(key,1,IPC_EXCL|IPC_CREAT|0600)) == -1) {
    return -1;
  }
  if (semctl(sem,0,SETVAL,1) == -1) {
    return -1;
  }
  return sem;
}

int destroySem(int &id) {
  if (id != -1) {
    if (semctl(id,0,IPC_RMID,0) == -1) {
      return -1;
    }
    id = -1;
  }
  return 0;
}

// Decrementar um semaforo
int enterCR(int sem)
{
  struct sembuf x;
  x.sem_num = 0;
  x.sem_op = -1;
  x.sem_flg = 0;
  if (semop(sem,&x,1)==-1) {
    return(-1);
  }
  return(0);
}

// Incrementar um semaforo
int exitCR(int sem)
{
  struct sembuf x;
  x.sem_num = 0;
  x.sem_op = +1;
  x.sem_flg = 0;
  if (semop(sem,&x,1)==-1)
    {
      return(-1);
    }
  return(0);
}
